
jQuery(document).ready(function () {
    jQuery('.fsf_glossary_word').each(function () {
        // set up title attribute for glossary
        var word = jQuery(this).text();
        word = word.toLowerCase();
        word = word.replace(/[^a-z0-9]/g, "");
        var lookedup = jQuery('#glossary_' + word);
        if (lookedup.length > 0) {
            jQuery(this).attr('title', lookedup.html());
        } else {
            jQuery(this).attr('title', "Unable to find " + '#glossary_' + word);
        }
    });
    jQuery('#glossary_words').remove();

    (function (a) {
        a.tools = a.tools || {
            version: "v1.2.6"
        }, a.tools.tooltip = {
            conf: {
                effect: "toggle",
                fadeOutSpeed: "fast",
                predelay: 0,
                delay: 30,
                opacity: 1,
                tip: 0,
                fadeIE: !1,
                position: ["top", "center"],
                offset: [0, 0],
                relative: !1,
                cancelDefault: !0,
                events: {
                    def: "mouseenter,mouseleave",
                    input: "focus,blur",
                    widget: "focus mouseenter,blur mouseleave",
                    tooltip: "mouseenter,mouseleave"
                },
                layout: "<div/>",
                tipClass: "tooltip"
            },
            addEffect: function (a, c, d) {
                b[a] = [c, d]
            }
        };
        var b = {
            toggle: [
            function (a) {
                var b = this.getConf(),
                    c = this.getTip(),
                    d = b.opacity;
                d < 1 && c.css({
                    opacity: d
                }), c.show(), a.call()
            },
            function (a) {
                this.getTip().hide(), a.call()
            }
        ],
            fade: [
            function (b) {
                var c = this.getConf();
                c.fadeIE ? this.getTip().fadeTo(c.fadeInSpeed, c.opacity, b) : (this.getTip().show(), b())
            },
            function (b) {
                var c = this.getConf();
                c.fadeIE ? this.getTip().fadeOut(c.fadeOutSpeed, b) : (this.getTip().hide(), b())
            }
        ]
        };

        function c(b, c, d) {
            var e = d.relative ? b.position().top : b.offset().top,
            f = d.relative ? b.position().left : b.offset().left,
            g = d.position[0];
            e -= c.outerHeight() - d.offset[0], f += b.outerWidth() + d.offset[1], /iPad/i.test(navigator.userAgent) && (e -= a(window).scrollTop());
            var h = c.outerHeight() + b.outerHeight();
            g == "center" && (e += h / 2), g == "bottom" && (e += h), g = d.position[1];
            var i = c.outerWidth() + b.outerWidth();
            g == "center" && (f -= i / 2), g == "left" && (f -= i);
            return {
                top: e,
                left: f
            }
        }

        function d(d, e) {
            var f = this,
            g = d.add(f),
            h, i = 0,
            j = 0,
            k = d.attr("title"),
            l = d.attr("data-tooltip"),
            m = b[e.effect],
            n, o = d.is(":input"),
            p = o && d.is(":checkbox, :radio, select, :button, :submit"),
            q = d.attr("type"),
            r = e.events[q] || e.events[o ? p ? "widget" : "input" : "def"];
            if (!m) throw "Nonexistent effect \"" + e.effect + "\"";
            r = r.split(/,\s*/);
            if (r.length != 2) throw "Tooltip: bad events configuration for " + q;
            d.bind(r[0], function (a) {
                clearTimeout(i), e.predelay ? j = setTimeout(function () {
                    f.show(a)
                }, e.predelay) : f.show(a)
            }).bind(r[1], function (a) {
                clearTimeout(j), e.delay ? i = setTimeout(function () {
                    f.hide(a)
                }, e.delay) : f.hide(a)
            }), k && e.cancelDefault && (d.removeAttr("title"), d.data("title", k)), a.extend(f, {
                show: function (b) {
                    if (!h) {
                        l ? h = a(l) : e.tip ? h = a(e.tip).eq(0) : k ? h = a(e.layout).addClass(e.tipClass).appendTo(document.body).hide().append(k) : (h = d.next(), h.length || (h = d.parent().next()));
                        if (!h.length) throw "Cannot find tooltip for " + d
                    }
                    if (f.isShown()) return f;
                    h.stop(!0, !0);
                    var o = c(d, h, e);
                    e.tip && h.html(d.data("title")), b = a.Event(), b.type = "onBeforeShow", g.trigger(b, [o]);
                    if (b.isDefaultPrevented()) return f;
                    o = c(d, h, e), h.css({
                        position: "absolute",
                        top: o.top,
                        left: o.left
                    }), n = !0, m[0].call(f, function () {
                        b.type = "onShow", n = "full", g.trigger(b)
                    });
                    var p = e.events.tooltip.split(/,\s*/);
                    h.data("__set") || (h.unbind(p[0]).bind(p[0], function () {
                        clearTimeout(i), clearTimeout(j)
                    }), p[1] && !d.is("input:not(:checkbox, :radio), textarea") && h.unbind(p[1]).bind(p[1], function (a) {
                        a.relatedTarget != d[0] && d.trigger(r[1].split(" ")[0])
                    }), e.tip || h.data("__set", !0));
                    return f
                },
                hide: function (c) {
                    if (!h || !f.isShown()) return f;
                    c = a.Event(), c.type = "onBeforeHide", g.trigger(c);
                    if (!c.isDefaultPrevented()) {
                        n = !1, b[e.effect][1].call(f, function () {
                            c.type = "onHide", g.trigger(c)
                        });
                        return f
                    }
                },
                isShown: function (a) {
                    return a ? n == "full" : n
                },
                getConf: function () {
                    return e
                },
                getTip: function () {
                    return h
                },
                getTrigger: function () {
                    return d
                }
            }), a.each("onHide,onBeforeShow,onShow,onBeforeHide".split(","), function (b, c) {
                a.isFunction(e[c]) && a(f).bind(c, e[c]), f[c] = function (b) {
                    b && a(f).bind(c, b);
                    return f
                }
            })
        }
        a.fn.tooltip = function (b) {
            var c = this.data("tooltip");
            if (c) return c;
            b = a.extend(!0, {}, a.tools.tooltip.conf, b), typeof b.position == "string" && (b.position = b.position.split(/,?\s/)), this.each(function () {
                c = new d(a(this), b), a(this).data("tooltip", c)
            });
            return b.api ? c : this
        }
    })(jQuery);

    FSJ_SetupTooltips();

    if (jQuery('.fsj_tip').length > 0)
        jQuery('.fsj_tip').tooltip({ position: "bottom right", effect: 'fade', tipClass: 'fsf_tooltip' });
    if (jQuery('.fsj_tip_wide').length > 0) {
        jQuery('.fsj_tip_wide').tooltip({ position: "bottom center", effect: 'fade', tipClass: 'fsf_tooltip_wide' });
    }
});

function FSJ_SetupTooltips() {
    jQuery('.fsj_tip').each(function () {
        var title = jQuery(this).attr('title');
        if (title) {
            var parts = title.split('::');
            if (parts.length == 2) {
                title = "<h4>" + parts[0] + "</h4><div class='fsj_gt_inner'>" + parts[1] + "</div>";
                jQuery(this).attr('title', title);
            }
        }
    });
}

